package com.crm.services;

import java.util.Date;
import java.util.List;
import java.util.Map;

import org.hibernate.service.spi.ServiceException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.alibaba.fastjson.JSONArray;
import com.crm.model.jdao.IContactDAO;
import com.crm.model.mdao.ContactMapper;
import com.crm.model.pojo.Contact;
import com.crm.model.pojo.Customer;
import com.crm.util.LoginUtil;
import com.github.pagehelper.PageHelper;

/**
 * 联系人服务类
 * @author Menghui
 *
 */
@Service
public class ContactServices {

	@Autowired
	IContactDAO conDAO;//联系人dao
	@Autowired
	ContactMapper conMapper;//联系人mybatisDAO
	@Autowired
	private DictionaryServices ds;//字典服务类
	/**
	 * 查询所有联系人，用于界面数据筛选
	 * @return
	 */
	public List<Map<String, String>> selectAllBytype(){
	      return conMapper.selectAllBytype();
	   }
	
	/**
	 * 权限查询联系人
	 * @param pageNum
	 * @param pageSize
	 * @return
	 * @throws ServiceException
	 */
	public List<Map<String, String>> selectContact(int pageNum, int pageSize) throws ServiceException {
		// 使用分页插件
		System.out.println("pageNum:" + pageNum + ",pageSize:" + pageSize);
		// 配置分页信息
		PageHelper.startPage(pageNum, pageSize);
		if(LoginUtil.getUser()!=null) {
			List<Map<String, String>> selectContact = conMapper.selectContact(LoginUtil.getUser().getuId(), LoginUtil.getUser().getuDept());
			System.out.println("权限客户："+selectContact);
			return selectContact;
		}
		return null;
	}
	
	/**
	 * 分页查询联系人
	 * @param pageNum
	 * @param pageSize
	 * @return
	 */
	public List<Map<String, String>> selectByPager(int pageNum, int pageSize){
      //使用分页插件
      System.out.println("pageNum:"+pageNum+",pageSize:"+pageSize);
      //配置分页信息。这句话后面的第一个查询将调用分页。使用分页，对应的Service方法最好只写一个查询方法
      PageHelper.startPage(pageNum, pageSize);
      // 获取
      List<Map<String, String>> list = conMapper.selectAllContact();
      System.out.println("大小"+list.size());
      return list;
   }
	
	/**
	 * 查询全部纪念日
	 * @return
	 */
	public List<Map<String, String>> selectMerday(int pageNum, int pageSize) {
		//使用分页插件
	    System.out.println("pageNum:"+pageNum+",pageSize:"+pageSize);
	    PageHelper.startPage(pageNum, pageSize);
		return conMapper.selectMerDay();
	}
	
	/**
	 * 根据联系人id查询联系人
	 * @param id
	 * @return 
	 * @return
	 */
	public Map<String, String> queryContact(Integer id) {
		return conMapper.selectById(id);
	}
	
	//查询纪念日信息
	public  Map<String, String> seletMerday(Integer id){
		return conMapper.selectByMerday(id);
	}
	
	//删除客户
	public Object deleteContact(Integer conId) {
		return conMapper.deleteContact(conId);
	}
	
	/**
	 * 修改联系人信息
	 */
	public Object updateContact(Contact contact) {
		return conMapper.updateContact(contact);
	}
	
	//修改纪念日信息
	public Object updateMerday(Contact contact) {
		return conMapper.updateMerday(contact);
	}
	
	/**
	 * 新增一条联系人信息
	 * @param con
	 * @return
	 */
	public Contact addCon(Contact con) {
		boolean flag = false;//定义一个标志
		Contact newCon= conDAO.save(con);
		if (newCon != null) {
			System.out.println(newCon);
		}
		System.out.println("新增一条联系人信息" + con);
		return newCon;
	}
	
	/**
	 * 字典表信息
	 * @return
	 */
	@RequestMapping("/contactDictInfo")
	@ResponseBody
	public JSONArray contactDictInfo() {
		JSONArray array=new JSONArray();
		array.add(ds.ListTransJSONArray(ds.findByDictParentid(1000)));//联系人分类
		array.add(ds.ListTransJSONArray(ds.findByDictParentid(1004)));//性别
		array.add(ds.ListTransJSONArray(ds.findByDictParentid(1007)));//证件类型
		array.add(ds.ListTransJSONArray(ds.findByDictParentid(1012)));//习惯
		array.add(ds.ListTransJSONArray(ds.findByDictParentid(1017)));//兴趣爱好
		array.add(ds.ListTransJSONArray(ds.findByDictParentid(1031)));//性格
		array.add(ds.ListTransJSONArray(ds.findByDictParentid(1039)));//社交特点
		array.add(ds.ListTransJSONArray(ds.findByDictParentid(1049)));//年收入
		array.add(ds.ListTransJSONArray(ds.findByDictParentid(1056)));//消费习惯
		array.add(ds.ListTransJSONArray(ds.findByDictParentid(1060)));//人员规模
		return array;
	}
	
	/**
	 * 根据客户编号查询联系人
	 * @param custid
	 * @return
	 */
	public List<Map<String, String>> selectcustTocon(Integer custid) {
		return conMapper.selectConbycustId(custid);
	}	
	
	/**
	 * 确认联系人是否重复
	 * @param conName
	 * @return
	 */
	public Integer findByConName(String conName) {
		Contact findByConName = conDAO.findByConName(conName);
		if(findByConName!=null) {
			return findByConName.getConId();
		}
		return 0;
	}
	/* 根据编号查询（jpa）
	 * @param custId
	 * @return
	 */
	public Contact findByConIdPage(Integer conid) {
		return conDAO.findById(conid).get();
	}
	/**
	 * 通过联系人id查询联系人
	 * @param conid
	 * @return
	 */
	public Contact findByConId(Integer conid) {
		return conDAO.findByConId(conid);
		
	}
	
	//全部联系人
	public List<Map<String, String>> selectAllContact(int pageNum, int pageSize,
			Integer cust) {
		PageHelper.startPage(pageNum, pageSize);
		return conMapper.selectAllContact();
	}
	
	//联系人分类
	public List<Map<String, String>> selectCatalogue(int pageNum, int pageSize,
			Integer cata) {
		PageHelper.startPage(pageNum, pageSize);
		return conMapper.selectBycata(cata);
	}
	
	//联系人性别
	public List<Map<String, String>> selectCustsex(int pageNum, int pageSize,
			Integer csex) {
		PageHelper.startPage(pageNum, pageSize);
		return conMapper.selectBysex(csex);
	}
		
	//证件类型
	public List<Map<String, String>> selectDtype(int pageNum, int pageSize,
			Integer dtype) {
		PageHelper.startPage(pageNum, pageSize);
		return conMapper.selectBydtype(dtype);
	}
	
	//联系人姓名模糊查询
	public List<Map<String, String>> selectCNameLike(int pageNum, int pageSize,
			String conName) {
		PageHelper.startPage(pageNum, pageSize);
		System.out.println("模糊查询客户姓名分页："+pageNum+","+pageSize);
		return conMapper.selectByconName(conName);
	}
	
	//纪念日
	public List<Map<String, String>> selectAll(int pageNum, int pageSize,
			Integer merday) {
		PageHelper.startPage(pageNum, pageSize);
		return conMapper.selectMerDay();
	}
	
	//今日纪念日
	public List<Map<String, String>> selectDay(int pageNum, int pageSize,
			Integer day) {
		PageHelper.startPage(pageNum, pageSize);
		return conMapper.selectByDay();
	}
	
	//本月纪念日
	public List<Map<String, String>> selectMonth(int pageNum, int pageSize,
			Integer month) {
		PageHelper.startPage(pageNum, pageSize);
		return conMapper.selectByMonth();
	}
	
	//下月纪念日
	public List<Map<String, String>> selectNext(int pageNum, int pageSize,
			Integer next) {
		PageHelper.startPage(pageNum, pageSize);
		return conMapper.selectByNext();
	}
	
}
